4
תגובות
החלטתי לעבור מ-mysql ל-mysqli, ונתקלתי בבעיה, אני מנסה להכניס למערך את השורות (ניסיתי גם להדפיס כל שורה בתור מערך אבל לא הצליח) וזה מכניס מערך רק את השורה השנייה ועוד שורה ריקה (יש בסה"כ 3 שרות), אני כבר לא יודע מה לעות, תודה רבה לעוזרים :)
$ChatArr = array();
if ($Chats = $mysqli->query("SELECT * FROM chat1")) {
while($Chats->fetch_object()){
$ChatArr[] = $Chats->fetch_assoc();
}
}
if ($Chats = $mysqli->query("SELECT * FROM chat1")) {
while($Chats->fetch_object()){
$ChatArr[] = $Chats->fetch_assoc();
}
}
4 תשובות
ההסבר הוא מאוד פשוט ללמה זה קורה,בתוך הלולאה שלך אתה מבצע את ה fetch הראשון,אחר כך שהוא נכנס ללולאה הוא מכניס את השורה השנייה [שכן הערך הראשון כבר הודפס בתוך התנאי] ובפעם השלישית הוא שוב עושה את החלק של הלולאה רק שעכשיו הערך שמחזיק ה fetch הוא ריק משום שאין יותר שורות שנשלפו.
בכל מקרה אין טעם לממש את זה עצמאית מאחר וקיימת מתודה שמבצעת זאת עבורך - http://php.net/manual/en/mysqli-result.fetch-all.php
עברתי שרת ובאחסון הזה לפי מה שהבנתי לא מותקן "MySQL Native Driver" (לא התעמקתי בנושא)
העניין הוא שזה אחסון חינמי שיתופי אז אין לי ממש איך להתקין את זה, האם יש חלופה לmysqli_fetch_all במקרה כזה?
כן אתה יכול לבצע את ה -
$ChatArr[] = $Chats->fetch_assoc()
בתוך התנאי עצמו
$ChatArr = array();
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
while($ChatArr[] = $Chats->fetch_assoc());
}
var_dump($ChatArr);
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
while($ChatArr[] = $Chats->fetch_assoc());
}
var_dump($ChatArr);
כמו שאמרו, fetch_assoc מחזיר מערך \ שורה בכל קריאה אליו. אתה קורה לו פעמיים, גם בתנאי של הלולאה וגם בלולאה עצמה אז הוא "מדלג" על שורות מסויימות.
או יותר טוב, תשתמש ב fetch_all
$ChatArr = array();
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
$ChatArr = $Chats->fetch_all(MYSQLI_ASSOC);
}
var_dump($ChatArr);
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
$ChatArr = $Chats->fetch_all(MYSQLI_ASSOC);
}
var_dump($ChatArr);